import time
import unittest

from parameterized import parameterized

from automatic.base.get_driver import GetDriver
from automatic.base.get_logger import GetLogger
from automatic.page.page_login import PageLogin
from automatic.page.page_task_add import PageTaskAdd
from automatic.tools.read_text import read_txt
from automatic.page.page_edit_task import PageEditTask
from automatic.page.page_task_list import PageTaskList


# 获取log 日志器
log = GetLogger().get_logger()


def get_data_edit_task():
    arrs = []
    for data in read_txt("edit_task.txt"):
        arrs.append(tuple(data.strip().split(",")))
    return arrs[1:]


# 新建 新建任务测试类 并 继承 unittest.TestCase
class TestEdittask(unittest.TestCase):
    # 新建setUpClass
    @classmethod
    def setUpClass(cls) -> None:
        try:
            # 实例化 并 获取 driver
            cls.driver = GetDriver.get_driver()
            # 实例化PageLogin(),调用登录功能
            cls.login = PageLogin(cls.driver)
            # 执行登录操作
            cls.login.page_login_success()
            # 实例化PageTaskAdd(),调用创建任务功能
            cls.task_add = PageTaskAdd(cls.driver)
            # 先创建一个任务
            cls.task_add.page_task_add_success()
            #并返回任务管理页面
            cls.task_add.task_management()
            time.sleep(2)
            #实例化PageTaskList(),调用查看功能
            cls.task_list=PageTaskList(cls.driver)
            #实例化PageEditTask()
            cls.edit_task=PageEditTask(cls.driver)

        except Exception as e:
            # 截图
            cls.edit_task.base_get_img()
            # 日志
            log.error("错误：{}".format(e))

    # 新建tearDownClass
    @classmethod
    def tearDownClass(cls) -> None:
        # 关闭driver驱动对象
        GetDriver.quit_driver()

    # 新建 数据上传测试方法
    # 使用parameterized进行参数化
    @parameterized.expand(get_data_edit_task())
    def test_upload_data(self, row_number, file_path, answer_countdown, team_name,expect_upload_result,
                                 expect_clear_result, expect_start_result):
        try:
            #查看第一行任务信息
            self.task_list.page_click_check_button(row_number)
            #进行数据添加操作（在任务监控界面进入任务）
            self.edit_task.task_check_and_data_add(file_path)
            #获取数据上传成功后的提示信息
            upload_msg=self.edit_task.page_get_data_add_success_info()
            print("数据上传提示信息：",upload_msg)
            try:
                self.assertEqual(upload_msg,expect_upload_result)
            except Exception as e:
                #截图
                self.edit_task.base_get_img()
                #日志
                log.error("数据上传出错了:{}".format(e))
            #点击任务管理，返回主页面
            self.task_add.task_management()
            time.sleep(2)
        except Exception as e:
            # 截图
            self.edit_task.base_get_img()
            # 日志
            log.error("出错了：{}".format(e))

    # 新建 数据上传测试方法
    # 使用parameterized进行参数化
    @parameterized.expand(get_data_edit_task())
    def test_clear_data(self, row_number, file_path, answer_countdown, team_name,expect_upload_result,
                                 expect_clear_result, expect_start_result):
        try:
            #查看第一行任务信息
            self.task_list.page_click_check_button(row_number)
            #进行数据清空操作
            self.edit_task.data_add_success_and_data_clear(file_path)
            #获取清空数据成功后的提示信息
            clear_msg=self.edit_task.page_get_data_clear_success_info()
            print("数据清空提示信息：",clear_msg)
            try:
                self.assertEqual(clear_msg,expect_clear_result)
            except Exception as e:
                #截图
                self.edit_task.base_get_img()
                #日志
                log.error("数据清空出错了:{}".format(e))
            #点击任务管理，返回主页面
            self.task_add.task_management()
            time.sleep(2)
        except Exception as e:
            # 截图
            self.edit_task.base_get_img()
            # 日志
            log.error("出错了：{}".format(e))

    @parameterized.expand(get_data_edit_task())
    def test_start_task(self, row_number, file_path, answer_countdown, team_name,expect_upload_result,
                                 expect_clear_result, expect_start_result):
        try:
            # 查看第一行任务信息
            self.task_list.page_click_check_button(row_number)
            # 进行任务开始操作
            self.edit_task.data_add_and_start_task(file_path, answer_countdown, team_name)
            # 获取任务开始的提示信息
            start_msg = self.edit_task.page_get_start_task_info()
            print("任务开始提示信息：", start_msg)
            try:
                self.assertEqual(start_msg, expect_start_result)
            except Exception as e:
                # 截图
                self.edit_task.base_get_img()
                # 日志
                log.error("任务开始出错了:{}".format(e))
        except Exception as e:
            # 截图
            self.edit_task.base_get_img()
            # 日志
            log.error("出错了：{}".format(e))

if __name__ == '__main__':
    unittest.main()

